package com.pb.wkflow.core.service;

import com.pb.wkflow.core.camunda.bpmn.instance.UserParticipant;
import com.pb.wkflow.core.entity.PostInfo;
import org.camunda.bpm.engine.delegate.DelegateTask;
import org.camunda.bpm.engine.impl.persistence.entity.TaskEntity;

import java.util.List;
import java.util.Set;

/**
 *
 * @author 苗益辉
 * @date 2022/5/16 11:04
 */
public interface WorkflowService {

    /**
     * 添加参与者
     * 类型 1  流程参与者
     * 类型 2 流程发起者 获取流程变量中的startUserId
     * 类型 3 流程执行者 获取历史活动的处理人
     * 类型 4 相关数据 根据参数从流程变量中获取数据
     * 类型 5 规则逻辑 调用内部服务或者外部链接
     * @param taskEntity taskEntity
     */
    void addParticipantUser(TaskEntity taskEntity);

    /**
     * 获取流程参与者
     * @param userParticipant userParticipant
     * @param taskEntity taskEntity
     * @return List<PostInfo>
     */
    List<PostInfo> getParticipantType1(UserParticipant userParticipant, TaskEntity taskEntity);

    /**
     * 获取流程发起者
     * @param delegateTask delegateTask
     * @return String
     */
    String getParticipantType2(DelegateTask delegateTask);

    /**
     * 获取流程执行者
     * @param userParticipant userParticipant
     * @param taskEntity taskEntity
     * @return Set<String>
     */
    Set<String> getParticipantType3(UserParticipant userParticipant, TaskEntity taskEntity);

    /**
     * 获取相关数据
     * @param userParticipant userParticipant
     * @param taskEntity taskEntity
     * @return Object
     */
    Object getParticipantType4(UserParticipant userParticipant, TaskEntity taskEntity);

    /**
     * 获取规则逻辑
     * @param userParticipant userParticipant
     * @param taskEntity taskEntity
     * @return List<PostInfo>
     */
    List<PostInfo> getParticipantType5(UserParticipant userParticipant, TaskEntity taskEntity);
}
